﻿using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Onshi.POS.Repositorios
{
    public class RepositorioImpuestos : RepositorioEntidad<Impuesto, Int32, IServicioDatosImpuestos>
    {
        #region Constructores

        public RepositorioImpuestos()
            : base()
        {
        }

        #endregion

        #region Atributos

        private RepositorioTiposImpuestos repositorioTiposImpuestos = new RepositorioTiposImpuestos();

        #endregion

        #region Metodos

        protected override Impuesto FilaAEntidad(DataRow fila)
        {
            var impuesto = new Impuesto();
            impuesto.Id = (Int32)fila["IdImpuesto"];
            impuesto.Nombre = (String)fila["Nombre"];
            impuesto.Observaciones = (String)fila["Observaciones"];
            impuesto.Valor = (Decimal)fila["Valor"];
            impuesto.MontoMaximo = (Decimal)fila["MontoMaximo"];
            impuesto.MontoAplicable = (Decimal)fila["MontoAplicable"];
            impuesto.EstaEliminado = (Boolean)fila["EstaEliminado"];
            impuesto.Tipo = repositorioTiposImpuestos.DevolverPorId((Byte)fila["IdTipoImpuesto"]);
            return impuesto;
        }

        public override Impuesto DevolverPorId(Int32 id)
        {
            var impuesto = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (impuesto == null)
                using (var ds = servicioDatos.Impuestos_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        impuesto = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(impuesto);
                    }
            return impuesto;
        }

        public void Insertar(Impuesto impuesto)
        {
            impuesto.Id = servicioDatos.Impuestos_Insertar(impuesto.Tipo.Id, impuesto.Nombre, impuesto.Observaciones, impuesto.Valor, impuesto.MontoMaximo, impuesto.MontoAplicable);
        }

        public void Modificar(Impuesto impuesto)
        {
            servicioDatos.Impuestos_Modificar(impuesto.Id, impuesto.Tipo.Id, impuesto.Nombre, impuesto.Observaciones, impuesto.Valor, impuesto.MontoMaximo, impuesto.MontoAplicable, impuesto.EstaEliminado);
        }

        public List<Impuesto> DevolverTodos()
        {
            using (var ds = servicioDatos.Impuestos_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        #endregion
    }
}